php三枚奖牌 分别是那些人得,javascript

您所在的位置:网站首页 金银铜奖牌 顺序 php三枚奖牌 分别是那些人得,javascript

php三枚奖牌 分别是那些人得,javascript

2024-06-27 20:01| 来源: 网络整理| 查看: 265

数据的结构大概是这样

$arr = [

['name'=>'国家一','score'=>[10,7,5]],

['name'=>'国家二','score'=>[10,9,5]],

['name'=>'国家三','score'=>[11,7,5]],

['name'=>'国家四','score'=>[10,7,9]],

];

排序的规则是,先比金牌,金牌一致比银牌,银牌一致比铜牌,铜牌一致比id,id就是初始的数组序号

score中的三个数字分别代表金,银,铜的数量

要求较少的用到内置函数,最好用php实现

回复内容:

数据的结构大概是这样

$arr = [

['name'=>'国家一','score'=>[10,7,5]],

['name'=>'国家二','score'=>[10,9,5]],

['name'=>'国家三','score'=>[11,7,5]],

['name'=>'国家四','score'=>[10,7,9]],

];

排序的规则是,先比金牌,金牌一致比银牌,银牌一致比铜牌,铜牌一致比id,id就是初始的数组序号

score中的三个数字分别代表金,银,铜的数量

要求较少的用到内置函数,最好用php实现

代表奖牌数量的有三个数字,你至少说说排序的规则是什么样子的吧

是总的奖牌数量?分别按照金银铜?还是什么奇怪的排列组合?

办法挺多的,比较懒的办法就是直接比四次,先按照金牌排序,选出金牌一样的,再在相同的里面按照银牌排序……以此类推就行了

想要一次性就排序好的话,那就把金银铜序号,变成一个数字来排序就行了。

比如,你的这个数组可以变成这样——

[010007005001,010009005002,011007005003,010007009004]

规则很简单,金银铜序号填充至三位,然后直接拼接起来,最后直接对这组数字进行排序就行了,一次到位。

PHP array_multisort实现像SQL ORDER BY那样按多个字段排序.

比如奥运奖牌榜,依次按金牌,银牌,铜牌的数目进行降序排序.

array(

'金牌' => 8,

'银牌' => 3,

'铜牌' => 6,

),

'俄罗斯' => array(

'金牌' => 3,

'银牌' => 6,

'铜牌' => 3,

),

'美国' => array(

'金牌' => 6,

'银牌' => 8,

'铜牌' => 8,

),

'澳大利亚' => array(

'金牌' => 4,

'银牌' => 0,

'铜牌' => 4,

),

'意大利' => array(

'金牌' => 3,

'银牌' => 4,

'铜牌' => 2,

),

);

// 实现 ORDER BY

foreach($arr as $k => $v) {

$sort['金牌'][$k] = $v['金牌'];

$sort['银牌'][$k] = $v['银牌'];

$sort['铜牌'][$k] = $v['铜牌'];

}

array_multisort(

$sort['金牌'], SORT_DESC,

$sort['银牌'], SORT_DESC,

$sort['铜牌'], SORT_DESC,

$arr);

var_export($arr);

来个python版的,假设每个国家每种奖牌数不会超过999。

arr = [

{'name':'国家一','score':[10,7,5]},

{'name':'国家二','score':[10,9,5]},

{'name':'国家三','score':[11,7,5]},

{'name':'国家四','score':[10,7,9]},

]

print sorted(arr, key=lambda a: '%03d%03d%03d' % tuple(a['score']), reverse=True)

score在设计时最好分开。

设计一个类(含国家,金,银,铜数),实现Comparable接口,按你所描述的规则实现compare方法。这不是很简单吗?

金牌+银牌+铜牌+id组成一个数字然后排序然后直接排序,如id13-【10,2,20】组成10022013,然后根据这个数字直接排序即可

本文原创发布php中文网,转载请注明出处,感谢您的尊重!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3